package com.cskaoyan.javase.basic._6exercise;

/**
 * @description: 牛刀小试
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 1，编译器怎么知道表达式的最终结果的数据类型？
 *      如果表达式中存在变量，那么表达式整体都是一个变量，然后整体会发生类型提示
 *      如果表达式中没有变量，全部是常量的话，编译器实际上会直接完成运算，将结果赋值，不存在类型提升
 *
 * 2，编译器会自动根据整型的字面值常量的大小来决定它是否能够被byte、short、char类型接收
 *      如果在取值范围内，会发生自动的“强制类型转换”
 *
 * 总结：
 *  1. 字面值常量互相做运算结果仍然是常量，它的运算结果是编译器可以确定的，无需程序运行
 * 2. 对于一个普通的整数字面值常量，编译器会默认当作int进行处理，**而编译器是能够认识该整数的大小的**
 *
 *   对于处在byte、short、char类型范围内的整数字面值常量，编译器会自动强转为对应类型**
 *
 * - 对于超过int但是仍在long类型范围内的整数，必须要明确指出它是long类型
 *
 * 3. 整型数据的大小非常容易判断，而浮点型不行。编译器无法自主判断浮点型大小，更不会自动转换浮点类型
 * 4. **一旦表达式中存在任何一个变量，整个表达式都不能当作常量，编译器就不能自行处理它了**
 *
 *
 */
public class Demo {
    public static void main(String[] args) {
        byte b1 = 1, b2 = 2, b;
        //-->
        byte a1 = 1;
        byte a2 = 2;
        byte a;

        b = ((byte) (b1 + b2));

        //b = b1 + 1;
        b = 1 + 2;
        System.out.println(b);

        //byte d = 130;

        short d = 20000;
        char e = 97;
        System.out.println(e);

        long a3 = 999999L;

        float a4 = 0.1F;


    }
}
